home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 8 / FM Towns Free Software Collection 8.iso / t_os / clcl / clcl.c < prev    next >
Text File  |  1994-06-01  |  7KB  |  287 lines

  1. // 時報消し
  2.  
  3. #include <egb.h>
  4. #include <mos.h>
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <conio.h>
  8. #include <string.h>
  9. #include "Platform.h"
  10. #include "aoi_lib2.h"
  11.  
  12. #define    APPNAME    "clcl.exp"
  13.  
  14.  
  15. void clearClockEasy3(int x0, int y0, int x1, int y1, int pageORG, int pageSCR, int pageBUF)
  16. {
  17.     int        x, y;
  18.     int     lenX;
  19.     char     buf1[4];
  20.     char     buf2[4];
  21.     char     buf3[4];
  22.     char     buf4[4];
  23.     char    Sbuf[360 * 2];
  24.     
  25.     lenX = x1 - x0;
  26.     y1++;
  27.     EGB_writePage(work, pageORG);
  28.     AOIgetGraph(buf1, x0, y0, x0, y0);
  29.     AOIgetGraph(buf2, x0, y1, x0, y1);
  30.     AOIgetGraph(buf3, x1, y0, x1, y0);
  31.     AOIgetGraph(buf4, x1, y1, x1, y1);
  32.  
  33.     EGB_writePage(work, pageBUF);
  34.     AOIputGraph(buf1, 0, 0, 0, 0);
  35.     EGB_writeMode(work, 7);
  36.     EGB_pastel(work, 64);
  37.     AOIputGraph(buf2, 0, 0, 0, 0);
  38.     AOIputGraph(buf3, 0, 0, 0, 0);
  39.     AOIputGraph(buf4, 0, 0, 0, 0);
  40.  
  41.     AOIgetGraph(Sbuf, 0, 0, 0, 0);
  42.     for (x = 0; x <= lenX; x++) {
  43.         AOIputGraph(Sbuf, x, 0, x, 0);
  44.     }
  45.     AOIgetGraph(Sbuf, 0, 0, lenX, 0);
  46.     EGB_writeMode(work, 0);
  47.     
  48.     EGB_writePage(work, pageSCR);            //    直接、表示画面に描画
  49.     for (y = y0; y < y1; y++) {
  50.         AOIputGraph(Sbuf, x0, y, x1, y);
  51.     }
  52. }
  53.  
  54. void clearClockEasy2(int x0, int y0, int x1, int y1, int pageORG, int pageSCR, int pageBUF)
  55. {
  56.     int        y;
  57.     int     lenX;
  58.     char     buf1[360 * 2];
  59.     char     buf2[360 * 2];
  60.     char    Sbuf[360 * 2];
  61.     
  62.     lenX = x1 - x0;
  63.     y1++;
  64.     for (y = y0; y < y1; y++) {
  65.         EGB_writePage(work, pageORG);
  66.         AOIgetGraph(buf1, x0, y0, x1, y0);
  67.     
  68.         EGB_writePage(work, pageBUF);
  69.         AOIputGraph(buf1, 0, 0, lenX, 0);        //    上ライン
  70.  
  71.         EGB_writePage(work, pageORG);
  72.         AOIgetGraph(buf2, x0, y1, x1, y1);
  73.  
  74.         EGB_writePage(work, pageBUF);
  75.         EGB_writeMode(work, 7);
  76.         EGB_pastel(work, 128);
  77.         AOIputGraph(buf2, 0, 0, lenX, 0);        //    上ラインに下ライン重ね
  78.         AOIgetGraph(Sbuf, 0, 0, lenX, 0);
  79.         EGB_writeMode(work, 0);
  80.         
  81.         EGB_writePage(work, pageSCR);            //    直接、表示画面に描画
  82.         AOIputGraph(Sbuf, x0, y, x1, y);
  83.     }
  84. }
  85.  
  86. void clearClockEasy(int x0, int y0, int x1, int y1, int pageORG, int pageSCR, int pageBUF)
  87. {
  88.     int        y;
  89.     int     lenX;
  90.     char     buf1[360 * 2];
  91.     char     buf2[360 * 2];
  92.     char    Sbuf[360 * 2];
  93.     
  94.     lenX = x1 - x0;
  95.     y1++;
  96.     EGB_writePage(work, pageORG);
  97.     AOIgetGraph(buf1, x0, y0, x1, y0);
  98.     AOIgetGraph(buf2, x0, y1, x1, y1);
  99.  
  100.     EGB_writePage(work, pageBUF);
  101.     AOIputGraph(buf1, 0, 0, lenX, 0);        //    上ライン
  102.     EGB_writeMode(work, 7);
  103.     EGB_pastel(work, 128);
  104.     AOIputGraph(buf2, 0, 0, lenX, 0);        //    上ラインに下ライン重ね
  105.     AOIgetGraph(Sbuf, 0, 0, lenX, 0);
  106.     EGB_writeMode(work, 0);
  107.     
  108.     EGB_writePage(work, pageSCR);            //    直接、表示画面に描画
  109.     for (y = y0; y < y1; y++) {
  110.         AOIputGraph(Sbuf, x0, y, x1, y);
  111.     }
  112. }
  113.  
  114. void clearClock(int x0, int y0, int x1, int y1, int pageORG, int pageSCR, int pageBUF)
  115. {
  116.     int        y, gap;
  117.     int     lenX, lenY;
  118.     double    pasGap, pas;
  119.     char     buf1[360 * 2];
  120.     char     buf2[360 * 2];
  121.     char    *Sbuf;
  122.     
  123.     lenX = x1 - x0;
  124.     lenY = y1 - y0;
  125.     gap = lenY - 1;
  126.     pasGap = 256 / (double)lenY;
  127.  
  128.     Sbuf = (char *)malloc(lenX * lenY * 2 * sizeof(char));
  129.     if (Sbuf == NULL) return;
  130.  
  131.     EGB_writePage(work, pageORG);
  132.     AOIgetGraph(buf1, x0, y0, x1, y0);
  133.     AOIgetGraph(buf2, x0, y1, x1, y1);
  134.  
  135.     EGB_writePage(work, pageBUF);
  136.     for (y = 0; y < gap; y++) {
  137.         AOIputGraph(buf1, 0, y, lenX, y);
  138.     }
  139.     EGB_writeMode(work, 7);
  140.     for (y = lenY, pas = 256; y >= 0; y--, pas -= pasGap) {
  141.         EGB_pastel(work, pas);
  142.         AOIputGraph(buf2, 0, y, lenX, y);
  143.     }
  144.     AOIgetGraph(Sbuf, 0, 0, lenX, lenY);
  145.     EGB_writeMode(work, 0);
  146.     
  147.     EGB_writePage(work, pageSCR);
  148.     AOIputGraph(Sbuf, x0, y0, x1, y1);
  149.     
  150.     free(Sbuf);
  151. }
  152.  
  153. void pointing(int *x0, int *y0, int *x1, int *y1)
  154. {
  155.     char    mes[2][AOImbMaxSize];
  156.     int        x, y, button;
  157.     int        dx, dy;
  158.     
  159.     strcpy(mes[0], " 処理範囲をマウスで");
  160.     strcpy(mes[1], "指定してください。");
  161.     if (AOImessageBox(180, 120, 16, APPNAME, 2, mes, MB_OKCANCEL) == ID_OK) {
  162.         MOS_disp(1);
  163.         do {
  164.             MOS_rdpos(&button, &x, &y);
  165.         } while (button);    //    一端マウスボタンを離さないと受け付けない
  166.         do {
  167.             MOS_rdpos(&button, &x, &y);
  168.         } while (!button);
  169.         dx = x;
  170.         dy = y;
  171.         do {
  172.             MOS_rdpos(&button, &x, &y);
  173.             MOS_disp(0);
  174.             AOIbox(dx, dy, x, y, 0);
  175.             AOIbox(dx, dy, x, y, 0x8000);
  176.             MOS_disp(1);
  177.         } while (button);
  178.         MOS_disp(0);
  179.         *x0 = dx;
  180.         *y0 = dy;
  181.         *x1 = x;
  182.         *y1 = y;
  183.         EGB_writeMode(work, 10);
  184.         AOIboxFull(0, 0, 360, 240, 0xffffffff);
  185.         EGB_writeMode(work, 0);
  186.     }
  187. }
  188.  
  189. void endSet(int *endMark)
  190. {
  191.     char    mes[1][AOImbMaxSize];
  192.  
  193.     strcpy(mes[0], "終了しますか?");
  194.     if (AOImessageBox(180, 120, 16, APPNAME, 1, mes, MB_YESNO) == ID_YES) {
  195.         *endMark = 1;
  196.     }
  197. }
  198.  
  199. void main(int argc, char *argv[])
  200. {
  201.     int        endMark = 0;
  202.     int        x, y, button;
  203.     int        x0, y0, x1, y1;
  204.     int        mode = 0;
  205.     char    buf[320 * 240 * 2];
  206.     
  207.     if (argc != 5) {
  208.         x0 = 25;        //    デフォルト値設定
  209.         y0 = 20;
  210.         x1 = 100;
  211.         y1 = 44;
  212.     } else {
  213.         x0 = atoi(argv[1]);
  214.         y0 = atoi(argv[2]);
  215.         x1 = atoi(argv[3]);
  216.         y1 = atoi(argv[4]);
  217.     }
  218.     
  219.     MOS_start(mwork, 4096);
  220.     EGB_init(work, 1536);
  221.     EGB_resolution(work, 0, 9);
  222.     EGB_resolution(work, 1, 9);
  223.     EGB_resolutionRam(work, 0x80, 16, 320, 240, buf);
  224.     EGB_displayPage(work, 0, 3);
  225.     EGB_displayStart(work, 2, 2, 2);
  226.     EGB_displayStart(work, 3, 360, 240);
  227.     
  228.     EGB_writePage(work, 0);
  229.     EGB_writeMode(work, 10);
  230.     AOIboxFull(0, 0, 360, 240, 0xffffffff);
  231.     EGB_writeMode(work, 0);
  232.     
  233.     EGB_superImpose(work, 65);
  234.     EGB_writePage(work, 1);
  235.     EGB_digitize(work, 1);
  236.  
  237.     MOS_resolution(0, 9);
  238.     MOS_color(1, 0xf8f8f8);
  239.     MOS_typeRom(80 + 1, 0, 0, pat_work);
  240.  
  241.     do {
  242.         switch (mode) {
  243.             case 0 :
  244.                 clearClock(x0, y0, x1, y1, 1, 0, 0x80);        //    段階的変化モード
  245.                 break;
  246.             case 1 :
  247.                 clearClockEasy(x0, y0, x1, y1, 1, 0, 0x80);    //    平均モード
  248.                 break;
  249.             case 2 :
  250.                 clearClockEasy2(x0, y0, x1, y1, 1, 0, 0x80);//    随時変化平均モード
  251.                 break;
  252.             case 3 :
  253.                 clearClockEasy3(x0, y0, x1, y1, 1, 0, 0x80);
  254.                 break;
  255.         }
  256.  
  257.         MOS_rdpos(&button, &x, &y);
  258.  
  259.         if (button) {
  260.             for (int i = 0; i < 20000; i++)        ;    //    チョン押し誤動作防止
  261.             MOS_rdpos(&button, &x, &y);
  262.             switch (button) {
  263.                 case 1 :
  264.                     pointing(&x0, &y0, &x1, &y1);    //    範囲指定
  265.                     break;
  266.                  case 2 :
  267.                     endSet(&endMark);                //    終了処理
  268.                     break;
  269.                  case 3 :
  270.                     mode++;                            //    モード変更
  271.                     if (mode == 4) mode = 0;
  272.                     break;
  273.             }
  274.             button = 0;
  275.             MOS_disp(0);
  276.             do {
  277.                 MOS_rdpos(&button, &x, &y);
  278.             } while (button);    //    一端マウスボタンを離さないと受け付けない
  279.         }
  280.  
  281. //        if (kbhit()) endMark++;
  282.     } while (!endMark);
  283.     
  284.     MOS_disp(0);
  285.     MOS_end();
  286. }
  287.